#include "tim_self.h"

task_flag_str task_flags={
	.run_pid_inc_loop=false,
	.run_pid_pos_loop=false,
	.update_oled=false,
	.	change_target=false
};

volatile uint8_t pid_counter,oled_counter;
volatile uint16_t target_counter;

void tim3_init(){
	pid_counter=0;
	oled_counter=0;
	target_counter=0;
	HAL_TIM_Base_Start_IT(&htim3);
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) // 该函数在 stm32f1xx_hal_tim.c 中定义为弱函数(__weak)，由用户再定义
{
	//1kHz Timer ISR
	if(htim == &htim3)
	{

		// 任务: 每1ms运行一次速度环PID计算 1kHz
		task_flags.run_pid_inc_loop = true;
		
		// 任务: 每10ms运行一次角度环PID计算 100Hz
		pid_counter++;
		if (pid_counter >= 1) {
			task_flags.run_pid_pos_loop = true;
			pid_counter = 0;
		}

		// 任务: 每200ms更新一次OLED显存 (5Hz)
		oled_counter++;
		if (oled_counter == 200) {
			task_flags.update_oled = true;
		}
		
		// 任务: 每2s改变一次target
		target_counter++;
		if(target_counter >= 2000){
			task_flags.change_target= true;
			target_counter=0;
		}
		

	}

}

/*
	
#	if 1
			vofa_send(2,(float)pid_angle.output,(float)pid_angle.now);	
#else
			// 使用sprintf直接格式化到字符串
				sprintf((char*)ble_txBuffer, "S%+06.2f%+06.2f%+06.2f%+06.2fE", 
				(float)pid_upright_t.now, 
				(float)pid_upright_t.target, 
				(float)pid_speed_t.now, 
				(float)pid_speed_t.target);

				// 发送BLE数据（假设tail是字符串长度，这里用strlen获取）
				BLE_print(ble_txBuffer, strlen((char*)ble_txBuffer));	
#endif
		
	}
}

*/

